package com.ruoyi.drone.service;

import java.util.List;
import com.ruoyi.drone.domain.DroneTaskExecution;
import com.ruoyi.drone.domain.dto.PilotTaskDetailDTO;

/**
 * 任务执行Service接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface IDroneTaskExecutionService 
{
    /**
     * 查询任务执行
     * 
     * @param executionId 任务执行主键
     * @return 任务执行
     */
    public DroneTaskExecution selectDroneTaskExecutionByExecutionId(Long executionId);

    /**
     * 查询任务执行列表
     * 
     * @param droneTaskExecution 任务执行
     * @return 任务执行集合
     */
    public List<DroneTaskExecution> selectDroneTaskExecutionList(DroneTaskExecution droneTaskExecution);

    /**
     * 根据任务ID查询任务执行列表
     * 
     * @param taskId 任务ID
     * @return 任务执行集合
     */
    public List<DroneTaskExecution> selectDroneTaskExecutionListByTaskId(Long taskId);

    /**
     * 根据飞手ID查询任务执行列表
     * 
     * @param pilotId 飞手ID
     * @return 任务执行集合
     */
    public List<DroneTaskExecution> selectDroneTaskExecutionListByPilotId(Long pilotId);

    /**
     * 根据申请ID查询任务执行
     * 
     * @param applicationId 申请ID
     * @return 任务执行
     */
    public DroneTaskExecution selectDroneTaskExecutionByApplicationId(Long applicationId);

    /**
     * 根据任务ID和飞手ID查询任务执行
     * 
     * @param taskId 任务ID
     * @param pilotId 飞手ID
     * @return 任务执行
     */
    public DroneTaskExecution selectDroneTaskExecutionByTaskIdAndPilotId(Long taskId, Long pilotId);

    /**
     * 新增任务执行
     * 
     * @param droneTaskExecution 任务执行
     * @return 结果
     */
    public int insertDroneTaskExecution(DroneTaskExecution droneTaskExecution);

    /**
     * 修改任务执行
     * 
     * @param droneTaskExecution 任务执行
     * @return 结果
     */
    public int updateDroneTaskExecution(DroneTaskExecution droneTaskExecution);

    /**
     * 批量删除任务执行
     * 
     * @param executionIds 需要删除的任务执行主键集合
     * @return 结果
     */
    public int deleteDroneTaskExecutionByExecutionIds(Long[] executionIds);

    /**
     * 删除任务执行信息
     * 
     * @param executionId 任务执行主键
     * @return 结果
     */
    public int deleteDroneTaskExecutionByExecutionId(Long executionId);

    /**
     * 检查任务和飞手的执行记录是否唯一
     * 
     * @param taskId 任务ID
     * @param pilotId 飞手ID
     * @return 结果
     */
    public boolean checkTaskExecutionUnique(Long taskId, Long pilotId);

    /**
     * 更新任务执行状态
     * 
     * @param droneTaskExecution 任务执行
     * @return 结果
     */
    public int updateDroneTaskExecutionStatus(DroneTaskExecution droneTaskExecution);

    /**
     * 更新任务执行进度
     * 
     * @param droneTaskExecution 任务执行
     * @return 结果
     */
    public int updateDroneTaskExecutionProgress(DroneTaskExecution droneTaskExecution);

    /**
     * 开始任务执行
     * 
     * @param droneTaskExecution 任务执行
     * @return 结果
     */
    public int startTaskExecution(DroneTaskExecution droneTaskExecution);

    /**
     * 完成任务执行
     * 
     * @param executionId 执行ID
     * @param finalPrice 最终价格
     * @param qualityScore 质量评分
     * @return 结果
     */
    public int completeTaskExecution(Long executionId, java.math.BigDecimal finalPrice, Integer qualityScore);

    /**
     * 暂停任务执行
     * 
     * @param executionId 执行ID
     * @return 结果
     */
    public int pauseTaskExecution(Long executionId);

    /**
     * 恢复任务执行
     * 
     * @param executionId 执行ID
     * @return 结果
     */
    public int resumeTaskExecution(Long executionId);

    /**
     * 取消任务执行
     * 
     * @param executionId 执行ID
     * @return 结果
     */
    public int cancelTaskExecution(Long executionId);

    /**
     * 更新工作进度
     * 
     * @param executionId 执行ID
     * @param completionRate 完成度
     * @param workContent 工作内容
     * @param workImages 工作图片
     * @param workVideos 工作视频
     * @param workHours 工作时长
     * @return 结果
     */
    public int updateWorkProgress(Long executionId, java.math.BigDecimal completionRate, String workContent, String workImages, String workVideos, java.math.BigDecimal workHours);

    /**
     * 查询飞手任务详情列表（包含任务信息）
     * 
     * @param pilotId 飞手ID
     * @return 任务详情集合
     */
    public List<PilotTaskDetailDTO> selectPilotTaskDetailList(Long pilotId);

    /**
     * 根据执行ID查询飞手任务详情
     * 
     * @param executionId 执行ID
     * @return 任务详情
     */
    public PilotTaskDetailDTO selectPilotTaskDetailByExecutionId(Long executionId);
}
